﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.sqt3
    逐步回归分析
    参数 n: 自变量x的个数。
    参数 k: 观测数据的点数。
    参数 x: x[k][n+1]前n列存放自变量因子x的k次观测值；最后一列存放因变量y的观测值。
    参数 f1: 欲选入因子时显著性检验的F-分布值。
    参数 f2: 欲剔除因子时显著性检验的F-分布值。
    参数 eps: 防止系数相关矩阵退化的判据。
    参数 xx: xx[n+1]前n个分量返回n个自变量因子的算术平均值；最后一个分量返回因变量y的算术平均值。
    参数 b: b[n+1]返回回归方程中各因子的回归系数。
    参数 v: v[n+1]前n个分量返回各因子的偏回归平方和；最后一个分量返回残差平方和。
    参数 s: s[n+1]前n个分量返回各因子回归系数的标准偏差；最后一个分量返回估计的标准偏差。
    参数 dt: dt[2]dt[0]返回复相关系数；dt[1]返回F-检验值。
    参数 ye: ye[k]返回对应于k个观测值的因变量条件期望值的k个估计值。
    参数 yr: yr[k]返回因变量的k个观测值的残差。
    参数 r: r[n+1][n+1]返回最终的规格化的系数相关矩阵
    */

    public static string drive_sqt3()
    {
        int i, j, k;
        double eps;
        double[] xx = new double[5];
        double[] b = new double[5];
        double[] v = new double[5];
        double[] s = new double[5];
        double[] ye = new double[13];
        double[] yr = new double[13];
        double[,] r = new double[5, 5];
        double[] dt = new double[2];
        double[,] x = new double[13, 5]{
            {7.0,26.0,6.0,60.0,78.5},
            {1.0,29.0,15.0,52.0,74.3},
            {11.0,56.0,8.0,20.0,104.3},
            {11.0,31.0,8.0,47.0,87.6},
            {7.0,52.0,6.0,33.0,95.9},
            {11.0,55.0,9.0,22.0,109.2},
            {3.0,71.0,17.0,6.0,102.7},
            {1.0,31.0,22.0,44.0,72.5},
            {2.0,54.0,18.0,22.0,93.1},
            {21.0,47.0,4.0,26.0,115.9},
            {1.0,40.0,23.0,34.0,83.8},
            {11.0,66.0,9.0,12.0,113.3},
            {10.0,68.0,8.0,12.0,109.4}
        };
        double[] f1 = new double[3] { 1.46, 4.75, 9.33 };
        double[] f2 = new double[3] { 1.45, 4.67, 9.07 };

        eps = 1.0e-30;
        string rs = "";
        for (k = 0; k <= 2; k++)
        {
            gl.sqt3(4, 13, x, f1[k], f2[k], eps, xx, b, v, s, dt, ye, yr, r);

            rs += gl.html_table("f1", f1);
            rs += gl.html_table("f2", f2);
            rs += gl.html_table("观测值", x);
            rs += gl.html_table("平均值", xx);
            rs += gl.html_table("回归系数", b);
            rs += gl.html_table("各因子的偏回归平方和", v);
            rs += gl.html_table("各因子回归系数的标准偏差", s);
            rs += gl.html_table("dt", dt);
            rs += gl.html_table("因变量条件期望值的估计值以及观测值的残差 ye", ye);
            rs += gl.html_table("因变量条件期望值的估计值以及观测值的残差 yr", yr);
            rs += gl.html_table("系数相关矩阵 r", r);
        }
        return rs;
    }
}